// 森林中，每个兔子都有颜色。其中一些兔子（可能是全部）告诉你还有多少其他的兔子和自己有相同的颜色。我们将这些回答放在 answers 数组里。

// 返回森林中兔子的最少数量。


typedef struct {
    int key;
    int cnt;
    UT_hash_handle hh;
} uthash_t;

int numRabbits(int* answers, int answersSize){
    if (answersSize == 0) return 0;
    
    uthash_t *hash = NULL, *ret;
    for (int i = 0; i < answersSize; i++) {
        HASH_FIND_INT(hash, &answers[i], ret);
        if (ret == NULL) {
            uthash_t *temp = malloc(sizeof(uthash_t));
            temp->key = answers[i];
            temp->cnt = 1;
            HASH_ADD_INT(hash, key, temp);
        } else {
            ret->cnt++;
        }
    }
	// 回答0的兔子表示该颜色的兔子就一只
    // 回答相同的兔子可能为相同颜色的兔子，个数为 回答数字+1
    // 如果回答1的兔子个数 > 2！如1,1表示兔子数量为2；1，1，1表示兔子数量为4。 

    int sum = 0;
    uthash_t *next;
    HASH_ITER(hh, hash, ret, next) {
        if (ret->key == 0) sum += ret->cnt; 
        else {
            int num = ret->key+1;   //回答的数字+1
            if (ret->cnt > num) {    // 1，1，1表示4只兔子, cnt > key+1, 要注意数量
                if (ret->cnt % num == 0) sum += (ret->cnt/num) * num;    
                else sum += (ret->cnt / num + 1) * num;
            } else {
                sum += num;
            }
        }
        HASH_DEL(hash, ret);
        free(ret);
    }
    return sum;
}